function addNum(x: number, y: number,z?: number):number {
    // 任何数字加undefined = NAN
    // 可选参数不能写到必选参数的前面,可选参数的后面不允许在出现参数
    return x+y+(z||0)
}
console.log(addNum(1,2));


// 当参数有默认参数的时候 如果有实参 ，默认使用实参，如果没有实参，使用默认值
function addNum1(x: number, y: number=1,z:number):number {
    return x+y+z
}

console.log(addNum1(1,4,3)) // 2

// 剩余参数
function add(...arg:number[]){
    console.log(arg);
    let sum:number = 0
    for(var i=0;i<arg.length;i++){
        sum+=arg[i]
    }
    return sum

    
}
console.log(add(1,2,3,4,5,6));
console.log(add(1,2));



// ts中  函数重载

// 声明一个函数 getUser，返回 string类型
function getUser(name:string):string;

// 仍然声明同名函数 getUser，返回数字类型
function getUser(age:number):number;
function getUser(age:boolean):boolean;


// 你定义的这个函数 必须满足以上所有的条件
// 当我们多次一定一个相同函数  在函数实现的时候 必须包含函数定义的所有类型
function getUser(str:any):any {
    if(typeof str==='string'){
        return '我的名字'+str
    }else if(typeof str ==='boolean'){
       return '我是布尔值'+str
    }else{
        return str
    }
}
console.log(getUser('张三'));
console.log(getUser(18));
console.log(getUser(true));


// 不同参数的重载
function getUser1(name:string):string;
function getUser1(name:string,age:number):number;

function getUser1(name:any,age?:number):any {
     if(age){
         return '我的名字'+name+'多大'+age
     }else{
         return '我的名字'+name+'多大保密'
     }
}
console.log(getUser1('小明'));
console.log(getUser1('小明',10));


